package com.terios.http;

import android.content.Context;
import android.text.TextUtils;

import com.terios.conts.CommonStrs;
import com.terios.util.SaveLoginParam;
import com.weibo.net.AccessToken;
import com.weibo.net.Utility;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboException;
import com.weibo.net.WeiboParameters;

/**
 * WeiboResponse.java 2012-10-6 下午4:35:17
 * 
 * @author Wang Tengrui
 */
public class WeiboResponse {
	private Weibo mWeibo;
	private static WeiboResponse mWeiboResponse;
	private static Context context;

	private WeiboResponse() {
		WeiboParameters nowUserParameters = SaveLoginParam.getNowUser(context);
		AccessToken accessToken = new AccessToken(
				nowUserParameters.getValue("access_token"),
				CommonStrs.CONSUMER_SECRET);
		accessToken.setExpiresIn(nowUserParameters.getValue("expires_in"));
		mWeibo = Weibo.getInstance();
		mWeibo.setupConsumerConfig(CommonStrs.CONSUMER_KEY,
				CommonStrs.CONSUMER_SECRET);
		mWeibo.setAccessToken(accessToken);
	}

	public static synchronized WeiboResponse getInstance(Context context) {
		WeiboResponse.context = context;
		if (null == mWeiboResponse) {
			mWeiboResponse = new WeiboResponse();

		}
		return mWeiboResponse;
	}

	/**
	 * 获取用户详细信息
	 * 
	 * @param bundle
	 *            参数uid与screen_name二者必选其一，且只能选其一
	 * @throws WeiboException
	 */
	public String getUserInfo(WeiboParameters bundle) throws WeiboException {
		String url = Weibo.SERVER + "users/show.json";
		String responseString = "";
		responseString = mWeibo.request(context, url, bundle,
				Utility.HTTPMETHOD_GET, mWeibo.getAccessToken());
		return responseString;
	}

	/**
	 * 获取当前登录用户及其所关注用户的最新微博
	 * 
	 * @param source
	 *            采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey
	 * @param access_token
	 *            采用OAuth授权方式为必填参数，其他授权方式不需要此参数，OAuth授权后获得。
	 * @param since_id
	 *            若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
	 * @param max_id
	 *            若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
	 * @param count
	 *            单页返回的记录条数，最大不超过100，默认为20。
	 * @param page
	 *            返回结果的页码，默认为1。
	 * @param base_app
	 *            是否只获取当前应用的数据。0为否（所有数据），1为是（仅当前应用），默认为0。
	 * @param feature
	 *            过滤类型ID，0：全部、1：原创、2：图片、3：视频、4：音乐，默认为0。
	 * @param trim_user
	 *            返回值中user字段开关，0：返回完整user字段、1：user字段仅返回user_id，默认为0。
	 * 
	 * @throws WeiboException
	 */
	public String getHomeTimeLine(WeiboParameters bundle) throws WeiboException {
		String url = Weibo.SERVER + "statuses/home_timeline.json";
		String responseString = "";
		responseString = mWeibo.request(context, url, bundle,
				Utility.HTTPMETHOD_GET, mWeibo.getAccessToken());
		return responseString;
	}

	/**
	 * 发布一条新微博
	 * 
	 * @return responseString 该微博创建之后的详细信息
	 * @param source
	 *            采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey。
	 * @param status
	 *            要发布的微博文本内容，必须做URLencode，内容不超过140个汉字。
	 * @param lat
	 *            纬度，有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
	 * @param lon
	 *            经度，有效范围：-180.0到+180.0，+表示东经，默认为0.0。(url请求中该参数名字是“long”)
	 * @throws WeiboException
	 */
	public String update(String source, String status, String lon, String lat)
			throws WeiboException {
		WeiboParameters bundle = new WeiboParameters();
		bundle.add("source", source);
		bundle.add("status", status);
		if (!TextUtils.isEmpty(lon)) {
			bundle.add("long", lon);
		}
		if (!TextUtils.isEmpty(lat)) {
			bundle.add("lat", lat);
		}
		String responseString = "";
		String url = Weibo.SERVER + "statuses/update.json";

		responseString = mWeibo.request(context, url, bundle,
				Utility.HTTPMETHOD_POST, mWeibo.getAccessToken());
		return responseString;
	}

	/**
	 * 上传图片并且发布一条新的微博
	 * 
	 * @return responseString 该微博创建之后的详细信息
	 * @param file
	 *            要上传的图片地址(url请求中该参数名字是“pic”)
	 * @param source
	 *            采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey。
	 * @param status
	 *            要发布的微博文本内容，必须做URLencode，内容不超过140个汉字。
	 * @param lat
	 *            纬度，有效范围：-90.0到+90.0，+表示北纬，默认为0.0。
	 * @param lon
	 *            经度，有效范围：-180.0到+180.0，+表示东经，默认为0.0。(url请求中该参数名字是“long”)
	 * @throws WeiboException
	 */
	public String upload(String source, String file, String status, String lon,
			String lat) throws WeiboException {
		WeiboParameters bundle = new WeiboParameters();
		bundle.add("source", source);
		bundle.add("pic", file);
		bundle.add("status", status);
		if (!TextUtils.isEmpty(lon)) {
			bundle.add("lon", lon);
		}
		if (!TextUtils.isEmpty(lat)) {
			bundle.add("lat", lat);
		}
		String responseString = "";
		String url = Weibo.SERVER + "statuses/upload.json";

		responseString = mWeibo.request(context, url, bundle,
				Utility.HTTPMETHOD_POST, mWeibo.getAccessToken());
		return responseString;
	}

}
